<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Map 和WeakMap</title>
</head>
<body>
    
</body>
<script>
    // let o = {
    //     name:'zs'
    // }
// Map 和WeakMap
// Map 他属于Map数据结构 他实际上也是一个构造函数

// JavaScript 的对象（Object），本质上是键值对的集合（Hash 结构），但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。
let map = new Map()

let obj = {
    name:'zs'
}
let obj1 = {
    name:'李四'
}
// set()  是map结构原型上的方法  可以往map里面去添加内容 第一个参数是 键名  第二个参数是建值

map.set(obj,obj1)
console.log(map);
// get()方法    获取map里面的建值
console.log(map.get(obj));

let arr = [['name','刘德华'],['hubby','唱歌']]
arr.forEach((item,index)=>{
    map.set(item,index)
})

map.set(true,'我是布尔值')

map.set(()=>{},'我是函数的值')
console.log(map.size);
map.clear()
console.log(map);

// Map结构 不仅能使用字符串当做键名 还可以使用 数组，对象，函数，布尔值，。。。。。当做键名 
// set()  get() size 长度属性  has（）  delete 删除  entries 键值对的遍历器   keys键名的遍历器 values建值的遍历器 forEach（） 循环遍历    clear 方法清除所有的成员

console.log(map.keys());

// WeakMap  WeakMap结构与Map结构类似，也是用于生成键值对的集合。
 
// WeakMap 只能接受对象作为他的键名  如果设置其他类型的数据当做键名，直接报错
let wm = new WeakMap()
// wm.set('name','hhhh') //报错  只能接受对象作为键名
wm.set({},'zs')
console.log(wm); //没有size属性 forEach方法 不能循环遍历 没有keys values entries.... 没有clear方法







</script>
</html>